package com.jrx.anytxn.customer.mapper.ext;


import com.jrx.anytxn.common.annotation.EnableHistoryLogAnnotation;
import com.jrx.anytxn.customer.entity.CmCustomerBankcardInfo;
import com.jrx.anytxn.customer.mapper.base.CmCustomerBankcardInfoMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 自定义客户银行卡mapper
 *
 * @author Qingyao Xing
 * @date 2019/9/27 14:56
 */
public interface ExtCmCustomerBankcardInfoMapper extends CmCustomerBankcardInfoMapper {

    /**
     * 根据客户号渠道号查询该客户下的银行卡信息
     *
     * @param customerId 客户id
     * @param channel    渠道
     * @param status     状态
     * @param tenantId   租户id
     * @return java.util.List<java.util.Map   <   java.lang.String   ,   java.lang.Object>>获取客户银行卡信息部分字段的map集合的list集合
     * @author Qingyao Xing
     * @date 2019/9/27 14:56
     */
    List<CmCustomerBankcardInfo> selectByChannelCusId(@Param("customerId") String customerId, @Param("channel") String channel, @Param("status") String status, @Param("tenantId") String tenantId);

    /**
     * 根据客户号,渠道号,银行卡号查询该客户下的银行卡信息
     *
     * @param customerId 客户id
     * @param channel    渠道
     * @param cardNumber 卡号
     * @param status     状态
     * @param tenantId   租户id
     * @return java.util.List<com.jrx.anytxn.customer.entity.CmCustomerBankcardInfo> 客户银行卡信息集合
     * @author Qingyao Xing
     * @date 2019/9/27 14:57
     */
    CmCustomerBankcardInfo selectByBankcard(@Param("customerId") String customerId, @Param("channel") String channel, @Param("cardNumber") String cardNumber, @Param("status") String status, @Param("tenantId") String tenantId);

    /**
     * 根据参数获取银行卡信息（均为有效卡）
     * 1.根据客户ID,机构号和卡号
     * 2.根据客户ID，卡号，机构号和默认收款卡标志
     *
     * @param customerId     客户id
     * @param defaultPayFlag 默认还款卡标志
     * @param cardNumber     卡号
     * @param channel        渠道
     * @param tenantId       租户id
     * @return CmCustomerBankcardInfo 客户银行卡信息
     */
    CmCustomerBankcardInfo selectBankCardByCondition(@Param("customerId") String customerId, @Param("defaultPayFlag") String defaultPayFlag, @Param("cardNumber") String cardNumber, @Param("channel") String channel, @Param("tenantId") String tenantId);

    /**
     * 判断除该卡片外，客户是否有其他已绑定的有效状态的卡片（客户id+渠道+卡号，状态为绑定），若无则校验不通过；
     *
     * @param customerId 客户id
     * @param channel    渠道
     * @param cardNumber 卡号
     * @param status     状态
     * @param tenantId   租户id
     * @return java.util.List<com.jrx.anytxn.customer.entity.CmCustomerBankcardInfo> 客户银行卡信息集合
     * @author Qingyao Xing
     * @date 2019/9/27 14:58
     */
    List<CmCustomerBankcardInfo> selectByCustomerIdAndChannelAndCardNumber(@Param("customerId") String customerId, @Param("channel") String channel, @Param("cardNumber") String cardNumber, @Param("status") String status, @Param("tenantId") String tenantId);


    /**
     * 根据条件查询客户银行卡数据
     *
     * @param cond 查询条件
     * @return 客户银行卡数据
     */
    List<CmCustomerBankcardInfo> selectByCondition(@Param("cond") CmCustomerBankcardInfo cond);

    /**
     * 根据主键、客户id、租户id修改银行卡信息
     *
     * @param cmCustomerBankcardInfo 银行卡信息
     * @return 生效个数
     */
    @EnableHistoryLogAnnotation
    int updateByIdAndCustomerIdAndTenantId(CmCustomerBankcardInfo cmCustomerBankcardInfo);

    /**
     * 根据客户号渠道号查询该客户下的默认放款卡
     *
     * @param customerId 客户id
     * @param channel    渠道
     * @param tenantId   租户id
     * @param defaultGetFlag   默认放款卡标识
     */
    List<CmCustomerBankcardInfo> selectByDefaultGetFlag(@Param("customerId") String customerId,
                                                        @Param("channel") String channel,
                                                        @Param("tenantId") String tenantId,
                                                        @Param("defaultGetFlag") String defaultGetFlag);

    /**
     * 根据客户号,租户，卡号查询卡列表
     *
     * @param id 客户id
     * @param tenantId   租户id
     * @param customerId   客户号
     */
    CmCustomerBankcardInfo selectByIdAndCustomerId(@Param("id") Long id,
                                                        @Param("tenantId") String tenantId,
                                                        @Param("customerId") String customerId);
    /**
     * 统计客户银行卡信息的数量
     *
     * @return int
     */
    int selectCountForBatch();

    void batchInsert(List<CmCustomerBankcardInfo> list);


    /**
     * 根据参数获取银行卡信息（均为有效卡）
     *
     * @param customerId     客户id
     * @param cardType       卡片类型
     * @param channel        渠道
     * @param tenantId       租户id
     * @return CmCustomerBankcardInfo 客户银行卡信息
     */
    List<CmCustomerBankcardInfo> selectBankCardByCardType(@Param("customerId") String customerId, @Param("cardType") String cardType, @Param("channel") String channel, @Param("tenantId") String tenantId);

    List<CmCustomerBankcardInfo> listByCustomerIdNotInCouponDetail(@Param("cardType") String cardType,  @Param("channel") String channel, @Param("tenantId") String tenantId, @Param("activityList") List<String> activityList);
}